package com.z100h.supplychain.evidence.facade;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import com.jeeplus.core.persistence.Page;
import com.z100h.supplychain.core.ProductionState;
import com.z100h.supplychain.customer.entity.CustomerStockroom;
import com.z100h.supplychain.evidence.entity.Stockout;
import com.z100h.supplychain.evidence.entity.StockoutErpResourceVo;
import com.z100h.supplychain.evidence.entity.StockoutSku;
import com.z100h.supplychain.evidence.entity.StockoutSkuVo;

/**
 * 
 * [描述信息：说明类的基本功能]
 *
 * @author Fyh - 1009173473@qq.com
 * @version 1.0 Created on 2021年5月17日 下午6:46:59
 */
public interface StockoutFacade<Stockout> {

	/**
	 * 保存或修改出库单
	 * 
	 * @param stockout
	 * @param skuList
	 * @param orderIds
	 * @param stockroomId
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2021年5月17日 下午6:47:11
	 */
	public List<String> save(Stockout stockout, JSONArray skuList, List<String> orderIds, String stockroomId);

	/**
	 * 保存或修改出库单
	 * 
	 * @param stockroomId
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2021年5月17日 下午6:44:51
	 */
	public List<String> save(String stockroomId);

	/**
	 * 
	 * 出库单列表
	 * 
	 * @param page
	 * @param stockout
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2021年5月17日 下午6:47:38
	 */
	public Page<Stockout> findStockoutByPage(Page<Stockout> page, Stockout stockout);

	/**
	 * 出库单明细
	 * @param stockout
	 * @return
	 */
	public Stockout getStockout(Stockout stockout);

	/**
	 * 出库单过闸机方法
	 * @param stockout
	 * @return
	 */
	public Map<String, Object> passingMachine(Stockout stockout);

	/**
	 * 获取出库单详情
	 * @param stockoutSku
	 * @return
	 */
	public List<StockoutSku> findStockoutSkuList(StockoutSku stockoutSku);

	public Stockout get(String id);

	public List<StockoutSku> findStockoutSkuByEvidenceId(String evidenceId);

	/**
	 * 
	 * 根据订单id聚合出库单sku
	 * 
	 * @param orderIds
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年4月15日 下午5:28:13
	 */
	public List<StockoutSku> findStockoutSkuByOrderIds(List<String> orderIds);

	/**
	 * 
	 * 根据仓库id查找未出库的复壮单
	 * 
	 * @param stockroomId
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年4月22日 下午3:23:35
	 */
	public List<StockoutSku> findStockoutSkuByStockroomId(String stockroomId);

	/**
	 * 
	 * 未完成的出库单出库
	 * 
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年5月15日 下午5:10:17
	 */
	public void stockoutUnfinishEvidence();

	/**
	 * 生产完成
	 * SC视图下出库单生产完成 隐含条件 state<>质检合格
	 * 
	 * @param evidenceId
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年9月9日 下午2:37:49
	 */
	public void completeProduction(String evidenceId);

	/**
	 * 生产完成
	 * ERP视图下的多选完成  隐含条件 state<>质检合格
	 * 
	 * @param ids
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年9月9日 下午2:37:52
	 */
	public void completeProduction(List<String> ids);

	/**
	 * 
	 * 质检  ProductionState productionState.QCFAILED\QCPASS
	 * SC视图下出库单生产完成
	 * 
	 * @param evidenceId
	 * @param productionState
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年9月16日 上午12:04:09
	 */
	public void qualityControl(String evidenceId, ProductionState productionState) throws Throwable;

	/**
	 * 
	 * 质检 ProductionState productionState.QCFAILED\QCPASS
	 * ERP视图下的多选完成
	 * 
	 * @param evidenceId	Eid
	 * @param ids			erpResId
	 * @param productionState
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年9月16日 上午12:04:22
	 */
	public void qualityControl(String evidenceId, List<String> ids, ProductionState productionState) throws Throwable;

	/**
	 * 所有未出库的sku
	 * 
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年8月30日 下午2:33:53
	 */
	public List<StockoutSkuVo> findSkuNotStockout(String companyId);

	/**
	 * 
	 * 根据evidenceId查询erp端的出库资源
	 * 
	 * @param evidenceId
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月9日 下午4:25:02
	 */
	public List<StockoutErpResourceVo> findStockoutErpResourceVoListByEvidenceId(String evidenceId, String state);

	/**
	 * 
	 * 质检单列表
	 * 
	 * @param page
	 * @param stockout
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月10日 下午3:21:10
	 */
	public Page<Stockout> findQcByPage(Page<Stockout> page, Stockout stockout);

	/**
	 * 
	 * 质检单资源
	 * 
	 * @param evidenceId
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月10日 下午3:41:04
	 */
	public List<StockoutErpResourceVo> findQcErpResourceVoListByEvidenceId(String evidenceId);

	/**
	 * 
	 * 出库单资源列表
	 * 
	 * @param page
	 * @param stockout
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月11日 上午10:19:35
	 */
	public Page<Stockout> findOutByPage(Page<Stockout> page, Stockout stockout);

	/**
	 * 
	 * 出库资源
	 * 
	 * @param evidenceId
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月11日 上午10:42:50
	 */
	public List<StockoutErpResourceVo> findOutErpResourceVoListByEvidenceId(String evidenceId);

	/**
	 * 
	 * 根据id查出出库erp资源
	 * 
	 * @param ids
	 * @return
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月11日 下午2:51:02
	 */
	public List<StockoutSku> findStockoutSkuErpResByIds(List<String> ids);

	/**
	 * 
	 * 全量出库
	 * 
	 * @param evidenceId
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月16日 下午2:38:51
	 */
	public void outRes(String evidenceId);

	/**
	 * 
	 * 逐条出库
	 * 
	 * @param ids
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月16日 下午2:39:01
	 */
	public void outRes(String evidenceId, List<String> ids);

	/**
	 * 
	 * 完成出库单
	 * 
	 * @param evidenceId
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月17日 上午11:11:26
	 */
	public void finishStockout(String evidenceId);

	/**
	 * 
	 * http接口 完成复壮，进入物流
	 * 
	 * @param repairIds
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月20日 上午11:12:42
	 */
	// public void finishRepair(List<String> repairIds) throws Throwable;

	public Page<CustomerStockroom> findNeedProduceByPage(Page<CustomerStockroom> page,
			CustomerStockroom customerStockroom);

	/**
	 * 
	 * 撤销复壮
	 * 
	 * @param stockroomId
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2019年9月24日 上午11:32:57
	 */
	public void cancelRepair(String stockroomId);

	public void outCommonStockout(String evidenceId);

	public String getCustomerIdByStockroomId(String stockroomId);

	/**
	 * 
	 * 自动质检
	 * 
	 * @author: Fyh - 1009173473@qq.com 
	 * @date: Created on 2020年12月23日 下午3:00:11
	 */
	public void autoQc() throws Throwable;

	public Stockout findById(String id);

}
